using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._LayersandTableViews
{
    /// <summary>
    /// <para>Make Aggregation Query Layer</para>
    /// <para>Creates a query layer that summarizes, aggregates,  and filters DBMS tables dynamically based on time, range, and attribute queries from a related table, and joins the result to a feature layer.</para>
    /// <para>创建一个查询图层，该图层根据相关表中的时间、范围和属性查询动态汇总、聚合和过滤 DBMS 表，并将结果连接到要素图层。</para>
    /// </summary>    
    [DisplayName("Make Aggregation Query Layer")]
    public class MakeAggregationQueryLayer : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public MakeAggregationQueryLayer()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_target_feature_class">
        /// <para>Target Feature Class</para>
        /// <para>The feature class or spatial table from an enterprise database.</para>
        /// <para>企业级数据库中的要素类或空间表。</para>
        /// </param>
        /// <param name="_target_join_field">
        /// <para>Target Join Field</para>
        /// <para>The field in the target feature class on which the join will be based.</para>
        /// <para>连接将基于的目标要素类中的字段。</para>
        /// </param>
        /// <param name="_related_table">
        /// <para>Related Table</para>
        /// <para>The input table containing the fields that will be used to calculate statistics. Statistics are joined to the Output Layer value.</para>
        /// <para>包含将用于计算统计数据的字段的输入表。统计数据将连接到输出图层值。</para>
        /// </param>
        /// <param name="_related_join_field">
        /// <para>Related Join Field</para>
        /// <para>A field in the summary table that contains the values on which the join will be based. Aggregation or summary statistics are also calculated separately for each unique attribute value from this field.</para>
        /// <para>汇总表中的字段，其中包含联接所基于的值。此外，还会针对此字段中的每个唯一属性值单独计算聚合或汇总统计数据。</para>
        /// </param>
        /// <param name="_out_layer">
        /// <para>Output Layer</para>
        /// <para>The output name of the query layer that will be created.</para>
        /// <para>将创建的查询图层的输出名称。</para>
        /// </param>
        public MakeAggregationQueryLayer(object _target_feature_class, object _target_join_field, object _related_table, object _related_join_field, object _out_layer)
        {
            this._target_feature_class = _target_feature_class;
            this._target_join_field = _target_join_field;
            this._related_table = _related_table;
            this._related_join_field = _related_join_field;
            this._out_layer = _out_layer;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Make Aggregation Query Layer";

        public override string CallName => "management.MakeAggregationQueryLayer";

        public override List<string> AcceptEnvironments => ["outputCoordinateSystem", "workspace"];

        public override object[] ParameterInfo => [_target_feature_class, _target_join_field, _related_table, _related_join_field, _out_layer, _statistics, _parameter_definitions, _oid_fields, _shape_type.GetGPValue(), _srid, _spatial_reference, _m_values.GetGPValue(), _z_values.GetGPValue(), _extent];

        /// <summary>
        /// <para>Target Feature Class</para>
        /// <para>The feature class or spatial table from an enterprise database.</para>
        /// <para>企业级数据库中的要素类或空间表。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_feature_class { get; set; }


        /// <summary>
        /// <para>Target Join Field</para>
        /// <para>The field in the target feature class on which the join will be based.</para>
        /// <para>连接将基于的目标要素类中的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Join Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_join_field { get; set; }


        /// <summary>
        /// <para>Related Table</para>
        /// <para>The input table containing the fields that will be used to calculate statistics. Statistics are joined to the Output Layer value.</para>
        /// <para>包含将用于计算统计数据的字段的输入表。统计数据将连接到输出图层值。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Related Table")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _related_table { get; set; }


        /// <summary>
        /// <para>Related Join Field</para>
        /// <para>A field in the summary table that contains the values on which the join will be based. Aggregation or summary statistics are also calculated separately for each unique attribute value from this field.</para>
        /// <para>汇总表中的字段，其中包含联接所基于的值。此外，还会针对此字段中的每个唯一属性值单独计算聚合或汇总统计数据。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Related Join Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _related_join_field { get; set; }


        /// <summary>
        /// <para>Output Layer</para>
        /// <para>The output name of the query layer that will be created.</para>
        /// <para>将创建的查询图层的输出名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_layer { get; set; }


        /// <summary>
        /// <para>Summary Field(s)</para>
        /// <para><xdoc>
        ///   <para>Specifies the numeric field or fields containing the attribute values that will be used to calculate the specified statistic. Multiple statistic and field combinations can be specified. Null values are excluded from all statistical calculations.</para>
        ///   <para>The output layer will include a ROW_COUNT field showing total count (or frequency) of each unique value from the Related Join Field value. The difference between the ROW_COUNT field and the Count statistic type is that ROW_COUNT includes null values while Count excludes null values.</para>
        ///   <para>Available statistics types are as follows:</para>
        ///   <bulletList>
        ///     <bullet_item>Count—The number of values included in the statistical calculations will be found. Each value will be counted except null values.</bullet_item><para/>
        ///     <bullet_item>Sum—The values for the specified field will be added together.</bullet_item><para/>
        ///     <bullet_item>Average—The average for the specified field will be calculated.</bullet_item><para/>
        ///     <bullet_item>Minimum—The smallest value for all records of the specified field will be found.</bullet_item><para/>
        ///     <bullet_item>Maximum—The largest value for all records of the specified field will be found.</bullet_item><para/>
        ///     <bullet_item>Standard deviation—The standard deviation of values in the specified field will be calculated.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定包含将用于计算指定统计数据的属性值的一个或多个数值字段。可以指定多个统计量和字段组合。空值从所有统计计算中排除。</para>
        ///   <para>输出图层将包括一个ROW_COUNT字段，该字段显示相关连接字段值中每个唯一值的总计数（或频率）。ROW_COUNT字段和 Count 统计类型之间的区别在于，ROW_COUNT包含 null 值，而 Count 不包括 null 值。</para>
        ///   <para>可用的统计信息类型如下：</para>
        ///   <bulletList>
        ///     <bullet_item>计数—将找到统计计算中包含的值数。除 null 值外，将计算每个值。</bullet_item><para/>
        ///     <bullet_item>Sum—指定字段的值将相加。</bullet_item><para/>
        ///     <bullet_item>平均值—将计算指定字段的平均值。</bullet_item><para/>
        ///     <bullet_item>最小值—将找到指定字段的所有记录的最小值。</bullet_item><para/>
        ///     <bullet_item>最大值—将找到指定字段的所有记录的最大值。</bullet_item><para/>
        ///     <bullet_item>标准差—将计算指定字段中值的标准差。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Summary Field(s)")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _statistics { get; set; } = null;


        /// <summary>
        /// <para>Parameter Definitions</para>
        /// <para><xdoc>
        ///   <para>Specifies one or more query parameters for criteria or conditions; records matching these criteria are used while computing aggregated results. A query parameter is similar to an SQL statement variable for which the value is defined when the query is run. This allows you to dynamically change query filters for the output layer. You can think of a parameter as a predicate or condition in a SQL where clause. For example Country_Name = 'Nigeria' in a SQL where clause is called a predicate in which the = is a comparison operator, Country_Name is a field name on the left, and 'Nigeria' is a value on the right. When you define more than one parameter, you must specify a logical operator between them (such as AND, OR, and so on).</para>
        ///   <para>When not specified, all records from the related table will be used in computing aggregated or summary results.</para>
        ///   <para>The two parameter definition types are the following:
        ///   <bulletList>
        ///     <bullet_item>Range—Connect numeric or temporal values dynamically to the range and time sliders.  </bullet_item><para/>
        ///     <bullet_item>Discrete—Update a query with literal values when the query is run.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>The following properties are available:</para>
        ///   <bulletList>
        ///     <bullet_item>Parameter Type—The parameter type can be Range or Discrete.</bullet_item><para/>
        ///     <bullet_item>Name—The name of the parameter, which is similar to a variable name. A name cannot contain spaces or special characters. Once the output query layer is created and the layer source SQL statement is checked, this name in the SQL statement that defines the output query layer source,will be prefixed with either ::r: (for range parameter) or :: (for discrete parameter).</bullet_item><para/>
        ///     <bullet_item>Alias—The alias for the parameter name. The alias can include spaces and special characters.</bullet_item><para/>
        ///     <bullet_item>Field or Expression—A field name or a valid SQL expression that will be used in the left side of a predicate or condition in a where clause.</bullet_item><para/>
        ///     <bullet_item>Data type—The data type of the field or expression specified in the Field or Expression column. When the Parameter Type value is Range, the Data type column value cannot be String.
        ///     <bulletList>
        ///       <bullet_item>Date—The data type of the field or expression will be Date (date time).  </bullet_item><para/>
        ///       <bullet_item>String—The data type of the field or expression will be String (text).  </bullet_item><para/>
        ///       <bullet_item>Integer—The data type of the field or expression will be Integer (whole numbers).  </bullet_item><para/>
        ///       <bullet_item>Double—The data type of the field or expression will be Double (fractional numbers).  </bullet_item><para/>
        ///     </bulletList>
        ///     </bullet_item><para/>
        ///     <bullet_item>Start Value—The default start value for the Range column. This is the value that will be used when the time or range slider is not enabled. When the Start Value and End Value column values are omitted and the time or range slider is disabled, all records from the related table will be used to compute aggregated results. This value is ignored when the Parameter Type column is set to Discrete.</bullet_item><para/>
        ///     <bullet_item>End Value—The default end value for the Range parameter. This is the value that will be used when the time or range slider is not enabled. When the Start Value and End Value column values are omitted and the time or range slider is disabled, all records from the related table will be used to compute aggregated results. This value is ignored when the Parameter Type column is set to Discrete.</bullet_item><para/>
        ///     <bullet_item>Operator for Discrete Parameter—The comparison operator that will be used between the Field or Expression column value and a value in an SQL predicate or condition.
        ///     <bulletList>
        ///       <bullet_item>None—Choose None, when Parameter Type is set to Range.  </bullet_item><para/>
        ///       <bullet_item>Equal to—Compare the equality of a field or expression to a value.  </bullet_item><para/>
        ///       <bullet_item>Not equal to—Test whether a field or expression is not equal to a value.  </bullet_item><para/>
        ///       <bullet_item>Greater than—Test whether a field or expression is higher than a value.  </bullet_item><para/>
        ///       <bullet_item>Less than—Test whether a field or expression is lower than a value.  </bullet_item><para/>
        ///       <bullet_item>Include values—Determine whether a value from a field or expression matches any value in a list.  </bullet_item><para/>
        ///     </bulletList>
        ///     </bullet_item><para/>
        ///     <bullet_item>Default Discrete Values—When the Parameter Type value is Discrete, you must provide a default value. When Operator for Discrete Parameter is Include values, you can provide multiple values separated by commas, for example VANDALISM,BURGLARY/THEFT.</bullet_item><para/>
        ///     <bullet_item>Operator for Next Parameter—The logical operator between this operator and the next one. This column is only applicable when you have more than one parameter definition.
        ///     <bulletList>
        ///       <bullet_item>None—Choose None when there are no more parameters.  </bullet_item><para/>
        ///       <bullet_item>And—Combine two conditions and select a record if both conditions are true.  </bullet_item><para/>
        ///       <bullet_item>Or—Combine two conditions and select a record if at least one condition is true.  </bullet_item><para/>
        ///     </bulletList>
        ///     </bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定条件或条件的一个或多个查询参数;在计算聚合结果时，将使用符合这些条件的记录。查询参数类似于 SQL 语句变量，在运行查询时为其定义值。这允许您动态更改输出图层的查询过滤器。您可以将参数视为 SQL where 子句中的谓词或条件。例如，Country_Name = 'Nigeria' 在 SQL 中，其中子句称为谓词，其中 = 是比较运算符，左侧是字段名称Country_Name 是字段名称，右侧是值。定义多个参数时，必须在它们之间指定逻辑运算符（如 AND、OR 等）。</para>
        ///   <para>如果未指定，则相关表中的所有记录将用于计算汇总或汇总结果。</para>
        /// <para>两种参数定义类型如下：
        ///   <bulletList>
        ///     <bullet_item>范围 （Range） - 将数值或时态值动态连接到范围和时间滑块。</bullet_item><para/>
        ///     <bullet_item>离散 - 在运行查询时使用文本值更新查询。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>以下属性可用：</para>
        ///   <bulletList>
        ///     <bullet_item>参数类型 - 参数类型可以是范围或离散。</bullet_item><para/>
        ///     <bullet_item>名称 - 参数的名称，类似于变量名称。名称不能包含空格或特殊字符。创建输出查询层并选中层源 SQL 语句后，定义输出查询层源的 SQL 语句中的此名称将以 ：：r：（范围参数）或 ：：（离散参数）为前缀。</bullet_item><para/>
        ///     <bullet_item>别名 - 参数名称的别名。别名可以包含空格和特殊字符。</bullet_item><para/>
        ///     <bullet_item>字段或表达式 - 字段名称或有效的 SQL 表达式，将在 where 子句的谓词或条件的左侧使用。</bullet_item><para/>
        /// <bullet_item>数据类型 - 在“字段”或“表达式”列中指定的字段或表达式的数据类型。当“参数类型”值为“范围”时，“数据类型”列值不能为“字符串”。
        ///     <bulletList>
        ///       <bullet_item>日期 - 字段或表达式的数据类型将为日期（日期时间）。</bullet_item><para/>
        ///       <bullet_item>字符串 - 字段或表达式的数据类型将为字符串（文本）。</bullet_item><para/>
        ///       <bullet_item>整数—字段或表达式的数据类型将为整数（整数）。</bullet_item><para/>
        ///       <bullet_item>Double - 字段或表达式的数据类型将为 Double（小数）。</bullet_item><para/>
        ///     </bulletList>
        ///     </bullet_item><para/>
        ///     <bullet_item>起始值 - 范围列的默认起始值。这是未启用时间或范围滑块时将使用的值。如果省略了“起始值”和“结束值”列值，并且禁用了“时间”或“范围”滑块，则相关表中的所有记录都将用于计算聚合结果。当“参数类型”列设置为“离散”时，将忽略此值。</bullet_item><para/>
        ///     <bullet_item>结束值 - 范围参数的默认结束值。这是未启用时间或范围滑块时将使用的值。如果省略了“起始值”和“结束值”列值，并且禁用了“时间”或“范围”滑块，则相关表中的所有记录都将用于计算聚合结果。当“参数类型”列设置为“离散”时，将忽略此值。</bullet_item><para/>
        /// <bullet_item>离散参数运算符 - 将在字段或表达式列值与 SQL 谓词或条件中的值之间使用的比较运算符。
        ///     <bulletList>
        ///       <bullet_item>无 （None） - 当参数类型设置为范围时，选择无。</bullet_item><para/>
        ///       <bullet_item>等于- 将字段或表达式与值的相等性进行比较。</bullet_item><para/>
        ///       <bullet_item>不等于 - 测试字段或表达式是否不等于值。</bullet_item><para/>
        ///       <bullet_item>大于—测试字段或表达式是否高于值。</bullet_item><para/>
        ///       <bullet_item>小于—测试字段或表达式是否低于值。</bullet_item><para/>
        ///       <bullet_item>包括值 - 确定字段或表达式中的值是否与列表中的任何值匹配。</bullet_item><para/>
        ///     </bulletList>
        ///     </bullet_item><para/>
        ///     <bullet_item>缺省离散值 （Default Discrete Values） - 当“参数类型”（Parameter Type） 值为“离散”（Discrete） 时，必须提供缺省值。当离散参数的运算符为“包含值”时，可以提供多个用逗号分隔的值，例如 VANDALISM、BURGLARY/THEFT。</bullet_item><para/>
        /// <bullet_item>下一个参数的运算符 - 此运算符与下一个运算符之间的逻辑运算符。仅当具有多个参数定义时，此列才适用。
        ///     <bulletList>
        ///       <bullet_item>None - 当没有更多参数时，选择“无”（None）。</bullet_item><para/>
        ///       <bullet_item>和—合并两个条件，如果两个条件都为真，则选取一条记录。</bullet_item><para/>
        ///       <bullet_item>或 - 合并两个条件，如果至少有一个条件为真，则选择一条记录。</bullet_item><para/>
        ///     </bulletList>
        ///     </bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Parameter Definitions")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _parameter_definitions { get; set; } = null;


        /// <summary>
        /// <para>Unique Identifier Field(s)</para>
        /// <para>The unique identifier fields that will be used to uniquely identify each row in the table.</para>
        /// <para>将用于唯一标识表中每一行的唯一标识符字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Unique Identifier Field(s)")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _oid_fields { get; set; } = null;


        /// <summary>
        /// <para>Shape Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the shape type of the query layer. Only those records from the result set of the query that match the specified shape type will be used in the output query layer. By default, the shape type of the first record in the result set will be used. This parameter is ignored if the result set of the query does not return a geometry field.</para>
        ///   <bulletList>
        ///     <bullet_item>Point—The output query layer will use point geometry.</bullet_item><para/>
        ///     <bullet_item>Multipoint—The output query layer will use multipoint geometry.</bullet_item><para/>
        ///     <bullet_item>Polygon—The output query layer will use polygon geometry.</bullet_item><para/>
        ///     <bullet_item>Polyline—The output query layer will use polyline geometry.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定查询图层的形状类型。只有查询结果集中与指定形状类型匹配的记录才会在输出查询图层中使用。默认情况下，将使用结果集中第一条记录的形状类型。如果查询的结果集未返回几何字段，则忽略此参数。</para>
        ///   <bulletList>
        ///     <bullet_item>点 - 输出查询图层将使用点几何。</bullet_item><para/>
        ///     <bullet_item>多点 - 输出查询图层将使用多点几何。</bullet_item><para/>
        ///     <bullet_item>面—输出查询图层将使用面几何。</bullet_item><para/>
        ///     <bullet_item>折线—输出查询图层将使用折线几何。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Shape Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _shape_type_value? _shape_type { get; set; } = null;

        public enum _shape_type_value
        {
            /// <summary>
            /// <para>Point</para>
            /// <para>Point—The output query layer will use point geometry.</para>
            /// <para>点 - 输出查询图层将使用点几何。</para>
            /// </summary>
            [Description("Point")]
            [GPEnumValue("POINT")]
            _POINT,

            /// <summary>
            /// <para>Multipoint</para>
            /// <para>Multipoint—The output query layer will use multipoint geometry.</para>
            /// <para>多点 - 输出查询图层将使用多点几何。</para>
            /// </summary>
            [Description("Multipoint")]
            [GPEnumValue("MULTIPOINT")]
            _MULTIPOINT,

            /// <summary>
            /// <para>Polygon</para>
            /// <para>Polygon—The output query layer will use polygon geometry.</para>
            /// <para>面—输出查询图层将使用面几何。</para>
            /// </summary>
            [Description("Polygon")]
            [GPEnumValue("POLYGON")]
            _POLYGON,

            /// <summary>
            /// <para>Polyline</para>
            /// <para>Polyline—The output query layer will use polyline geometry.</para>
            /// <para>折线—输出查询图层将使用折线几何。</para>
            /// </summary>
            [Description("Polyline")]
            [GPEnumValue("POLYLINE")]
            _POLYLINE,

        }

        /// <summary>
        /// <para>Spatial Reference ID (SRID)</para>
        /// <para>The spatial reference identifier (SRID) value for queries that return geometry. Only those records from the result set of the query that match the specified SRID value will be used in the output query layer. By default, the SRID value of the first record in the result set will be used. This parameter is ignored if the result set of the query does not return a geometry field.</para>
        /// <para>返回几何图形的查询的空间参考标识符 （SRID） 值。只有查询结果集中与指定 SRID 值匹配的记录才会在输出查询图层中使用。默认情况下，将使用结果集中第一条记录的 SRID 值。如果查询的结果集未返回几何字段，则忽略此参数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Spatial Reference ID (SRID)")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _srid { get; set; } = null;


        /// <summary>
        /// <para>Coordinate System</para>
        /// <para>The coordinate system that will be used by the output query layer. By default, the spatial reference of the first record in the result set will be used. This parameter is ignored if the result set of the query does not return a geometry field.</para>
        /// <para>输出查询图层将使用的坐标系。默认情况下，将使用结果集中第一条记录的空间参考。如果查询的结果集未返回几何字段，则忽略此参数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Coordinate System")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _spatial_reference { get; set; } = null;


        /// <summary>
        /// <para>Coordinates include M values</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the output layer will include linear measurements (m-values).</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The layer will include m-values.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The layer will not include m-values. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定输出图层是否包括线性测量值（m 值）。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 图层将包括 m 值。</bullet_item><para/>
        ///     <bullet_item>未选中 - 图层将不包含 m 值。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Coordinates include M values")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _m_values_value _m_values { get; set; } = _m_values_value._false;

        public enum _m_values_value
        {
            /// <summary>
            /// <para>INCLUDE_M_VALUES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INCLUDE_M_VALUES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DO_NOT_INCLUDE_M_VALUES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DO_NOT_INCLUDE_M_VALUES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Coordinates include Z values</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the output layer will include elevation values (z-values).</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The layer will include z-values.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The layer will not include z-values. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定输出图层是否包含高程值（z 值）。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 图层将包括 z 值。</bullet_item><para/>
        ///     <bullet_item>未选中 - 图层将不包含 z 值。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Coordinates include Z values")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _z_values_value _z_values { get; set; } = _z_values_value._false;

        public enum _z_values_value
        {
            /// <summary>
            /// <para>INCLUDE_Z_VALUES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INCLUDE_Z_VALUES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DO_NOT_INCLUDE_Z_VALUES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DO_NOT_INCLUDE_Z_VALUES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Extent</para>
        /// <para><xdoc>
        ///   <para>Specifies the extent of the layer. The extent must include all features in the table.</para>
        ///   <bulletList>
        ///     <bullet_item>Default—The extent will be based on the maximum extent of all participating inputs. This is the default.</bullet_item><para/>
        ///     <bullet_item>Current Display Extent—The extent is equal to the data frame or visible display. The option is not available when there is no active map.</bullet_item><para/>
        ///     <bullet_item>As Specified Below—The extent will be based on the minimum and maximum extent values specified.</bullet_item><para/>
        ///     <bullet_item>Browse—The extent will be based on an existing dataset.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定图层的范围。范围必须包括表中的所有要素。</para>
        ///   <bulletList>
        ///     <bullet_item>默认值 - 范围将基于所有参与输入的最大范围。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>当前显示范围 - 范围等于数据框或可见显示。当没有活动地图时，该选项不可用。</bullet_item><para/>
        ///     <bullet_item>如下所述 - 范围将基于指定的最小和最大范围值。</bullet_item><para/>
        ///     <bullet_item>浏览 - 范围将基于现有数据集。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Extent")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _extent { get; set; } = null;


        public MakeAggregationQueryLayer SetEnv(object outputCoordinateSystem = null, object workspace = null)
        {
            base.SetEnv(outputCoordinateSystem: outputCoordinateSystem, workspace: workspace);
            return this;
        }

    }

}